package com.zym.init.model.query;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import lombok.Data;

@Data
public class PageQuery {
    /**
     * 页码
     */
    private Integer pageNo;
    /**
     * 每页条数
     */
    private Integer pageSize;
    /**
     * 排序字段
     */
    private String sortBy;
    /**
     * 是否升序
     */
    private Boolean isAsc;

    /**
     * 将 PageQuery 转化为 Mybatis Plus Page
     *
     * @param orderItems 手动设置排序条件
     * @param <T>        泛型
     * @return Mybatis Plus Page
     */
    public <T> Page<T> toMpPage(OrderItem... orderItems) {
        if (pageNo == null) {
            pageNo = 1;
        }
        if (pageSize == null) {
            pageSize = 20;
        }
        // 1. 分页条件
        Page<T> p = Page.of(pageNo, pageSize);
        // 2. 排序提交
        if (sortBy != null) {
            p.addOrder((new OrderItem()).setColumn(sortBy).setAsc(isAsc));
            return p;
        }

        if (orderItems != null) {
            p.addOrder(orderItems);
        }
        return p;
    }

    // 手动传入排序方式
    public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc) {
        return this.toMpPage((new OrderItem()).setColumn(defaultSortBy).setAsc(isAsc));
    }

    // 默认 按照 CreateTime 降序排序
    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
        return this.toMpPage("create_time", false);
    }

    // 默认 按照 UpdateTime 降序排序
    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {
        return this.toMpPage("update_time", false);
    }
}